/**
 * 文件名：@MapContext.java <br/>
 * 包名：cn.efunbox.afw.core.mvc.context <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.mvc.context;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * 类名：MapContext  <br />
 *
 * 功能：
 *
 * @author xtwin <br />
 * 创建时间：2015年12月1日 下午2:34:07  <br />
 * @version 2015年12月1日
 */
public class MapContext implements Context {

	// 数据容器
	private Map<String, Object> datas;
	
	// 区域对象
	private Locale locale;

	// 结果状态码，默认为0
	private int result;
	
	// 当前用户
	private Object user;
	
	/**
	 * 构造方法
	 */
	public MapContext() {
		this(new HashMap<String, Object>());
	}
	
	/**
	 * 构造方法
	 */
	public MapContext(Map<String, Object> datas) {
		this.datas = datas;
	}

	/**
	 * 功能: 取得指定名称的参数值，这里仅仅是从内部的map容器中做get操作 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2013-11-21 下午03:19:46<br/>
	 * 
	 * @param <V>
	 * @return <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#getValue(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public <V> V getValue(String name) {
		return (V) datas.get(name);
	}

	/**
	 * 功能: 更新指定名称的参数值，这里仅仅是执行内部map的put操作 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2013-11-21 下午03:19:46<br/>
	 * 
	 * @param name
	 * @param value <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#setValue(java.lang.String, java.lang.Object)
	 */
	@Override
	public void setValue(String name, Object value) {
		datas.put(name, value);
	}

	/**
	 * 功能: 取得当前的区域信息 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2013-11-21 下午03:20:31<br/>
	 * 
	 * @return <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#getLocale()
	 */
	@Override
	public Locale getLocale() {
		return locale;
	}

	/**
	 * 功能: 设置当前的区域信息 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2013-11-21 下午03:20:48<br/>
	 *  <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#setLocale(java.util.Locale)
	 */
	@Override
	public void setLocale(Locale locale) {
		this.locale = locale;
	}

	/**
	 * 功能:取得当前的用户对象 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015-6-26 下午02:29:11<br/>
	 * 
	 * @param <T>
	 * @return <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#getUser()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public <T> T getUser() {
		//return getValue(FWConstant.KEY_USER_IN_CONTEXT);
		return (T) user;
	}

	/**
	 * 功能:设置当前的用户对象 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015-6-26 下午02:29:11<br/>
	 * 
	 * @param user <br/>
	 * @see com.bocsd.cpfp.common.core.context.Context#setUser(java.lang.Object)
	 */
	@Override
	public void setUser(Object user) {
		//setValue(FWConstant.KEY_USER_IN_CONTEXT, user);
		this.user = user;
	}

	/**
	 * 功能:取得当前的结果 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月1日 下午2:04:45<br/>
	 * 
	 * @return <br/>
	 * @see cn.efunbox.afw.mvc.context.Context#getResult()
	 */
	@Override
	public int getResult() {
		return result;
	}

	/**
	 * 功能:设置当前的结果 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月1日 下午2:04:45<br/>
	 * 
	 * @param result <br/>
	 * @see cn.efunbox.afw.mvc.context.Context#setResult(int)
	 */
	@Override
	public void setResult(int result) {
		this.result = result;
	}

	/**
	 * 功能: 取得当前的所有参数<br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月1日 下午2:04:45<br/>
	 * 
	 * @return <br/>
	 * @see cn.efunbox.afw.mvc.context.Context#getValue()
	 */
	@Override
	public Map<String, Object> getValue() {
		//return new HashMap<String, Object>(datas);
		return datas;
	}
}
